package com.yuandian.customer.perception.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuandian.api.customer_perception.po.*;
import com.yuandian.api.customer_perception.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 说明：业务告警mapper接口
 * @Author yanjun
 * @Date 2021/3/30 9:23
 */
@Mapper
public interface BusinessAlarmMapper {

    /**
     * 客户感知-查询告警类型比例
     * @param params 业务告警请求对象
     * @return 告警类型比例vo对象集合
     */
    List<AlarmTypeProportionVo> queryAlarmTypeProportion(@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询告警类型详情
     *
     * @return 告警类型详情
     */
    List<AlarmTypeProportionVo> queryAlarmTypeDetail (@Param("params") BusinessAlarmParams params);


    /**
     * 客户感知-查询告警类型数top
     * @param params 业务告警请求对象
     * @return 告警类型数top vo对象集合
     */
    List<AlarmTypeCountTopVo> queryAlarmTypeCountTop(@Param("params") BusinessAlarmParams params);


    /**
     * 客户感知-查询影响区域告警最多的topN务
     *
     * @param params 业务告警请求对象
     * @return 影响区域告警最多的top vo 对象集合
     */
    List<InfluenceAreaTopVo> queryInfluenceAreaTop (@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询影响区域告警最多的topN
     *
     * @param params 业务告警请求对象
     * @return 影响区域告警最多的top vo 对象集合
     */
    List<InfluenceAreaTopVo> queryInfluenceAreaTopList (@Param("params") BusinessAlarmParams params);


    /**
     * 客户感知-查询影响业务最多的故障top
     * @param params 业务告警请求对象
     * @return 影响业务最多vo对象集合
     */
    List<InfluenceBusiTopVo> queryInfluenceBusiTop(@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询影响业务最多的故障top 业务列表
     *
     * @param params 业务告警请求对象
     * @return 影响业务最多vo对象集合
     */
    List<InfluenceBusiTopVo> queryInfluenceBusiTopList(@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询影响系统最多的告警top
     *
     * @param params 业务告警请求对象
     * @return 影响系统最多的vo对象集合
     */
    List<InfluenceSysTopVo> queryAlarmSystemTopN (@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询影响系统最多的告警top
     *
     * @param params 业务告警请求对象
     * @return 影响系统最多的vo对象集合
     */
    List<InfluenceSysTopVo> queryAlarmSystemTopNList (@Param("params") BusinessAlarmParams params);

    /**
     * 客户感知-查询发生次数最多的故障top
     * @param params 业务告警请求对象
     * @return 发生次数最多的故障vo对象集合
     */
    List<HappenCountAlarmTopVo> queryHappenCountAlarmTop(@Param("params") BusinessAlarmParams params);

    /**
     * 查询告警统计列表
     * @param params 业务告警请求对象
     * @param page 分页参数
     * @return 告警统计vo对象集合
     */
    List<AlarmStatisticsVo> queryAlarmStatisticsList(
            @Param("params") BusinessAlarmParams params, Page<BusinessStatisticsVo> page);


    /**
     * 查询系统告警总览列表
     *
     * @param params 请求对象
     * @return 系统告警总览对象集合
     */
    List<AlarmOverviewVo> querySystemAlarmOverviewList(@Param("params") AlarmOverviewParams params, Page<AlarmOverviewVo> page);

    /**
     * 查询系统告警总览-成功率、失败率等字段
     *
     * @param params 请求对象
     * @return 系统告警总览对象集合
     */
    List<AlarmOverviewVo> querySysDetailStatList(@Param("params") AlarmOverviewParams params);


    /**
     * 查询告警周期柱状图
     *
     * @param params 请求参数
     * @return 告警周期柱状图数据
     */
    List<HistoGramVo> queryHistoGramVoList (@Param("params") HistoGramParams params);

    /**
     * 查询告警级别列表
     *
     * @return 告警级别
     */
    List<AlarmLevelVo> queryAlarmLevelList ();


    /**
     * 系统业务告警列表
     * @param params
     * @return
     */
    List<AlarmSysAndBusiVo> alarmSysAndBusiList(Page<AlarmSysAndBusiVo> page, @Param("params") AlarmSysAndBusiParams params);

    /**
     * 系统业务告警列表-不排序用于导出
     * @param params
     * @return
     */
    List<AlarmSysAndBusiVo> alarmSysAndBusiListExport(@Param("params") AlarmSysAndBusiParams params);

    List<AlarmOverviewListVo> alarmOverviewList(Page<AlarmOverviewListVo> page, @Param("params") AlarmSysAndBusiParams params);

    List<AlarmOverviewListVo> alarmOverviewListExport(@Param("params") AlarmSysAndBusiParams params);


	/**
	 * 查询告警详情数据
	 */
	List<AlarmDetailVo> queryAlarmDetailList(Page<AlarmDetailVo> page, @Param("params") BusinessAlarmParams params);

	/**
	 * 查询用户告警列表
	 *
	 * @param params 请求参数
	 * @return 通用返回对象
	 */
	List<UserIdentifyAlarmVo> queryUserAlarmList(Page<UserIdentifyAlarmVo> page, @Param("params") UserIdentifyAlarmParams params);

	/**
	 * 查询用户告警列表
	 *
	 * @param params 请求参数
	 * @return 通用返回对象
	 */
	List<AlarmDistributionVo> queryAlarmDistribution(@Param("params") AlarmDistributionParams params);



	/**
	 * 查询用户告警列表
	 *
	 * @param params 请求参数
	 * @return 通用返回对象
	 */
	List<ReturnCodeDetailVo> queryReturnCodeDetailList(Page<ReturnCodeDetailVo> page, @Param("params") AlarmDistributionParams params);

}
